VisualHMI - 数据记录控件
什么是数据记录控件?
数据记录控件可以实时将数据显示在表格。同一时刻,将不同的数据形成一条记录,添加到表格显示。最大支持100个通道(100列参数显示),且支持掉电存储、导出、翻页、清除等等
本文档介绍历史数据记录的常用的应用:
- 数据采集:导出、翻页等功能
- 特殊应用
使用范围:VisualHMI - HMI&M系列
1.属性说明
1.1.基本设置
数据记录控件的基本设置输入如下所示:
数据来源:可以选择“资料采集”、“配方数据”。
资料采集::采集同一寄存器的数据,将不同时刻的数据记录在表格上,详细属性说明:请参考VisualHMI - 资料采集(点击查看)
字符串表格:√。若资料采集设置里面,配置的数据类型为字符串,此处“√”后,将以字符串方式显示出来。
时间排序:时间顺序、逆序
日期/时间:显示时间、显示日期、显示时间和日期
配方数据:配方的内容显示到表格上,详细参考VisualHMI - 配方应用(点击查看)如下所示:
配方数据索引:选择对应的配方集
直接编辑配方:√,勾选后,点击表格参数,直接修改
通道数量:数据通道的数量
表格设置:设置表格的标题、文本宽度;
自动列宽:各列按比例自动调整宽度;默认勾选
- 勾选:自动按照表格设置的比例调整每一列的宽度。如下所示,5个通道、自动列宽,即显示序号+时间+5个通道。如控件宽度为490,显示的每一列会遵循60:140:100:100:100:100:100
不勾选:按照“表格设置”的参数调整。
自动按照表格设置每一列的像素宽度,显示每一列宽度,如控件宽度为490,第1列为60像素宽度、第2列为140宽度的像素、第3列为100宽度的像素、第4列为100宽度的像素、第5列为100宽度的像素、第6列为100宽度的像素、第7列为90宽度的像素。
- 无:时间+序号+5个通道,可以通过滚动条拖动查看
- 1列:序号固定:时间+5个通道,可以通过滚动条拖动查看
- 2列:序号+时间固定,5个通道可以通过滚动条拖动查看
每行页数:每页行数;
显示滚动条:√,垂直方向。勾选后设置超过行数时,显示滚动条;
手势滑动:设置可以手动滑动
翻页控制
Addr+0,设置数据记录的翻页:。1-上一页(第一行方向);2-下一页;3-首页(第一行);4-尾页(最后以后);
Addr+1,读取翻页操作是否可行:BIT1表示 “上一页”、BIT2表示“下一页”、BIT3表示“首页”、“BIT4”表示尾页。若该位为1,表示翻页可以执行;若该位为0,表示翻页操作不可以执行
Addr+2~Addr+3,时间戳定位:UINT32,时间戳定位,可以搭配下拉菜单关联,当下拉选择对应的时间,滚动条会自动定位到对应的时间节点。精度天为单位
Addr+4~Addr+5,选中行通知:UINT32,表示选中的行号,索引从0开始。
1.2.外观设置
数据记录控件的外观设置属性如下所示:
默认字体:字库选择
字体大小:字号设置
文字颜色:字体颜色设置
字体对齐:可设置左、居中、右
显示标题:√
- 标题文字颜色:可单独设置标题的文字颜色
显示网格:√
网格颜色:设置网格的颜色
边框颜色:设置边框的颜色
显示背景:√
标题背景颜色:可单独设置标题背景的纯色图片
背景颜色:数据表格内容的背景颜色
奇偶分行:√;可设置“背景颜色2”的颜色值
2.应用
2.1.数据采集
2.1.1.资料采集配置
资料采集配置,如下所示:
描述信息:历史数据
采集模式:定时采样;
记录条数:2000;
采样周期:1;
采样单位:秒;
数据地址:LW1010
数据类型:UINT16
数据个数:100
控制地址:LW1001
导出标题:$标题,选择对应的表头标签
采样控制地址:LW1000
- 启动模式OFF→ON
2.1.2.数据记录控件配置
画面中添加一个数据记录表格,属性配置如下所示:
数据来源:资料采集,资料取样索引为“[0]历史数据”
时间顺序:时间逆序
时间日期:显示时间
通道数:为100。和资料采集→数据个数→100一致
自动列宽:不勾选
- 固定列数为2:即是序号、时间两列固定不动
表格设置:
每页行数:5
显示滚动条:√,当记录数大于5时,显示滚动条,可拖动滚动条查看
手势滑动:√,当记录数大于5时,可以上下滑动表格查看数据
控制地址:
翻页控制:√,地址为LW1004,UINT16类型
允许翻页:地址为LW1005,UINT16,只读
时间戳定位:√,地址为LW1006,UINT32类型
选中行通知:√,地址为LW1008,UINT32类型
2.1.3.采样使能配置
添加2个位状态指示灯控件,关联LW1000地址,和资料采集配置的“采样控制地址:LW1000对应,配置如下所示:
- 读取地址:LW1000
- 切换开关:√
- 开关类型:设为ON(开始采集)/ 设为OFF(停止采集)
【运行预览】
运行虚拟屏,点击开始采样,表格开始1s记录条记录;拖动水平滚动条可以查看100个通道的数据;点击表格记录,可以显示具体的行号;点击停止采样,表格停止记录,如下所示:
2.1.4.数据记录-清除/导出记录
添加两个字状态按钮,关联LW1001地址,和资料采集配置的“控制地址LW1001”对应,用于清除/导出(SD卡或U盘),配置如下所示:
- 写入地址:LW1001
- 操作模式:写入常量
- 常量值:85(清除)/1(导出)
【运行预览】
运行虚拟屏,点击清除记录,表格数据清空,如下所示:
2.1.5.数据记录-通道翻页控制
添加4个字按钮控件,均关联LW1004地址,和曲线控件配置的“翻页控制 0x1004”对应,配置如下所示
写入地址:LW1004
操作模式:写入常量
- 常量值:1/2/3/4
控制权限:√。显示隐藏,表示还有下一页、上一页操作
条件控制:LW1005.1/LW1005.2
比较:==
值:1
【运行预览】
运行虚拟屏,点击上一页、下一页、尾页、首页,滚动条的位置和表格的内容实时刷新,显示效果如下所示:
2.1.6.历史曲线控件-时间戳定位
添加一个菜单控件,关联地址0xA000,关联到资料采集,通过下拉选中时间,定位到该天数据的第一条记录位置。配置如下所示:
显示模式:下拉
写入地址:0xA000
选项内容:历史数据日期
资料采集所有:[0]数据记录
日期:YYY/MM/DD
排序:时间顺序
【运行预览】
运行虚拟屏,下拉选择某一天数据,垂直滚动条定位到当天第一条记录
[!warning|tip:注意] 实体屏记录N天记录,下拉菜单可选项就有N条
2.2.特殊应用
如上述的应用可知,资料采样要求寄存器地址连续、数据类型是一致(如均是UINT16,或INT32)。
本章节主要针对地址不连续、数据类型不一样举例说明。以PLC Modbus 协议为例,如下所示
名称 | 电压V | 电流A | 负载率% | 谐波% | 功因Φ |
---|---|---|---|---|---|
数据地址 | 4x0000 | 4x0007 | 4x0015 | 4x0021 | 4x0026 |
数据类型 | UINT32 | UINT32 | UINT16 | INT16 | UINT32 |
名称 | 有功kVar | 无功kVar | 视在kVar | 有功电能% |
---|---|---|---|---|
数据地址 | 4x0036 | 4x0038 | 4x003A | 4x0040 |
数据类型 | INT32 | INT32 | INT32 | UINT32 |
根据上述寄存器类型和地址,可以通过字符串表格,在Lua脚本获取对应的寄存器值,拼接成字符串写到对应地址
2.1.1.资料采集配置
资料采集配置,如下所示:
描述信息:特殊应用;
采样模式:定时采样
记录条数:1000;
采样周期:1;
采样单位:秒;
数据地址:LW2000
数据类型:STRING
数据个数:100
导出标题:$标题,选择对应的表头标签
采样控制地址:$SysiteOnline.0 从机在线掩码
- 启动模式OFF→ON
2.1.2.数据记录控件配置
画面中添加一个数据记录表格,属性配置如下所示:
数据来源:资料采集,资料取样索引为“[1]特殊应用”
字符串表格:√
- 字符编码:GB CODE
时间顺序:时间逆序
时间日期:显示时间
通道数:9。
自动列宽:不勾选
- 固定列数为2:即是序号、时间两列固定不动
每页行数:5
2.1.3.LUA 脚本
详细的LAU API 、语法说明可参考《VisualHMI - LUA教程》
在on_run 回调函数中,获取Modbus 从机寄存器的值,拼接成字符串写到LW2000,其中每一列用";"分割,如下所示
function on_init()
set_run_cycle(1000) --设置on_run回调触发周期
start_read(0, VT_4x, 0, 80)--读从站1,保持寄存器0x0000~0x0050的值
end
function on_run(screen)
local slaveOnile = get_uint16(VT_LW, 0x01A3) & 0x0001 --从机在线状态
if slaveOnile == 0x01
then
select_slave(0) --选择从机1
local vol = get_uint32(VT_4x, 0x0000)--获取电压
local cur = get_uint32(VT_4x, 0x0007)--获取电流
local ed = get_uint16(VT_4x, 0x0015)--获取负载率
local thd = get_int16( VT_4x, 0x0021)--获取谐波
local pf = get_uint32(VT_4x, 0x0026)--获取功因
local ap = get_int32( VT_4x, 0x0036)--获取有功kVar
local rp = get_int32( VT_4x, 0x0038)--获取无功kVar
local vp = get_int32( VT_4x, 0x003A)--获取视功kVar
local w = get_uint32(VT_4x, 0x0040)--获取有功电能
local rcrd = string.format('%0.2f', vol / 100)..';'.. --拼接字符串
string.format('%0.2f', cur / 100)..';'..
string.format('%0.1f', ed / 10 )..';'..
string.format('%0.1f', thd / 10 )..';'..
string.format('%0.1f', pf / 100)..';'..
string.format('%0.1f', ap / 100)..';'..
string.format('%0.1f', rp / 100)..';'..
string.format('%0.1f', vp / 100)..';'..
string.format('%0.1f', w / 100)..';'
set_string(VT_LW, 0x2000, rcrd)--设置到LW2000地址
end
end
2.1.4.运行预览
运行虚拟屏,屏幕和从机通讯正常,表格实时显示数据,如下所示: